const fs = require('fs')

// 不同情况下输出不一样，setTimeout最少等待1ms，具体触发哪个还得看具体执行

// 场景1 进入事件循环前，（同步输出1、4后，过了0ms，先进入timer阶段再进入check阶段）
// 1、4、2、3
// console.log(1)
// setTimeout(() => { console.log(2) })
// setImmediate(() => { console.log(3) })
// console.log(4)

// 场景2 timer 阶段中
// setTimeout(() => {
//     // timer阶段中，同步输出1，4，再往下进入check阶段，下一轮事件循环输出2
//     // 1、4、3、2
//     console.log(1)
//     setTimeout(() => { console.log(2) })
//     setImmediate(() => { console.log(3) })
//     console.log(4)
// })

// 场景3 io callback阶段中
// fs.readFile('./package.json', 'utf-8', (err, data) => {
//     // io callback阶段中，先同步输出1、4，再进入check阶段，下一轮事件循环进入timer阶段
//     // 1、4、3、2
//     console.log(1)
//     setTimeout(() => { console.log(2) })
//     setImmediate(() => { console.log(3) })
//     console.log(4)
// })

// 场景4 nextTick 中
// process.nextTick(() => {
//     // 在当前阶段中执行，先同步输出1、4，再进入下一个阶段（这里是下一个循环），进入timer再进入check
//     // 1、4、2、3
//     console.log(1)
//     setTimeout(() => { console.log(2) })
//     setImmediate(() => { console.log(3) })
//     console.log(4)
// })